/*
 * Created on 09/06/2010
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package com.stefanini.pe.bbva.mbl.in.dao;

import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import com.stefanini.pe.bbva.mbl.carga.in.to.Configuracionarchivo;
import com.stefanini.pe.bbva.mbl.in.carga.common.Constantes;
import com.stefanini.pe.bbva.mbl.in.dao.iface.UtilDAO;
import com.stefanini.pe.bbva.mbl.in.utils.Verificacion;

import org.apache.log4j.Logger;

public class UtilDAOImpl extends SqlMapClientDaoSupport implements UtilDAO{
	private static final Logger logger = Logger.getLogger(UtilDAOImpl.class);
	
	public UtilDAOImpl(){
		super();
	}
	
	public boolean verificarCodigoDuplicadoOficina(String codigo, String id,String tipo) {
		Verificacion verificacion = null;
		boolean resp = false;
		
		logger.info("Inicio");
		
		verificacion = new Verificacion("tiipg_dimoficina","codoficina",codigo,"idoficina",id,tipo);
		getSqlMapClientTemplate().queryForObject("UTIL.ibatorgenerated_verifica_duplicados", verificacion);
		resp =  Boolean.valueOf(verificacion.getO_strFalg()).booleanValue();
		
		logger.info("Fin");
        
        return resp;
    }
	public boolean verificarCodigoDuplicadoTerritorio(String codigo, String id,String tipo) {
		Verificacion verificacion = null;
		boolean resp = false;
		
		logger.info("Inicio");
		
		verificacion = new Verificacion("tiipg_dimterritorio","codterritorio",codigo,"idterritorio",id,tipo);
        getSqlMapClientTemplate().queryForObject("UTIL.ibatorgenerated_verifica_duplicados", verificacion);
        resp = Boolean.valueOf(verificacion.getO_strFalg()).booleanValue();
        
        logger.info("Fin");

        return resp;
    }
	public boolean verificarCodigoDuplicadoArea(String codigo, String id,String tipo) {
		Verificacion verificacion = null;
		boolean resp = false;
		
		logger.info("Inicio");
		
		verificacion = new Verificacion("tiipg_dimarea","CODIGOHOST",codigo,"idarea",id,tipo);			
        getSqlMapClientTemplate().queryForObject("UTIL.ibatorgenerated_verifica_duplicados", verificacion);
        resp = Boolean.valueOf(verificacion.getO_strFalg()).booleanValue();
        
        logger.info("Fin");
        
        return resp;
    }

	public boolean verificarCodigoDuplicadoAcceso(String codigo, String id,String tipo) {
		Verificacion verificacion = null;
		boolean resp = false;
		
		logger.info("Inicio");
		
		verificacion = new Verificacion("TSAA_ACCESO_OFICINA","COD_OFICINA",codigo,"id_acceso_oficina",id,tipo);        
		getSqlMapClientTemplate().queryForObject("UTIL.ibatorgenerated_verifica_duplicados", verificacion);
		resp = Boolean.valueOf(verificacion.getO_strFalg()).booleanValue();
		
		logger.info("Fin");
        
        return resp;
    }
	
	public List listaTablasTemporales_All(){
		List records = null;
		
		logger.info("Inicio");
		
		records = getSqlMapClientTemplate().queryForList("UTIL.selectTablasTemporales", null);
		
		logger.info("Fin");
		
        return records;
	}
	public List listaBugs(String tabla, String campo, String contrato,String startPosition,String dimensionToUse){
		ArrayList list=new ArrayList();
		Map temporales=new HashMap();
		
		logger.info("Inicio");
		
		temporales.put("nombreTabla",tabla);
		temporales.put("campoValidacion",campo);
		temporales.put("i_contrato", contrato);
		
		temporales.put("i_startPosition", startPosition);
		temporales.put("i_dimensionToUse", dimensionToUse);
		List records = getSqlMapClientTemplate().queryForList("UTIL.selectBugsTemporales", temporales);         
		list.add((List)temporales.get("o_result_set"));
        list.add((String)temporales.get("l_cnt"));
        
        logger.info("Fin");
        
        return list;
	}
	
	public String cuentaTacho(String tabla, String campo){
		ArrayList list=new ArrayList();
		Map temporales=new HashMap();
		String contador = null;
		
		logger.info("Inicio");
		
		temporales.put("nombreTabla",tabla);
		temporales.put("campoValidacion",campo);
		getSqlMapClientTemplate().queryForList("UTIL.cuentaTacho", temporales);         
        contador = (String)temporales.get("l_cnt");
        
        logger.info("Fin");
        
        return contador;
	}
	public List listaContadorTemporales() {
		Map temporales=new HashMap();
		List lista = null;
		
		logger.info("Inicio");
		
        getSqlMapClientTemplate().queryForObject("UTIL.obtenerContadorTemporales", temporales);
        lista = (List)temporales.get("o_result_set");
        
        logger.info("Fin");
        
        return lista;
    }
	public List listaNulos() {
		LinkedHashMap temporales = new LinkedHashMap();
		List lista = null;
		
		logger.info("Inicio");
		
        getSqlMapClientTemplate().queryForObject("UTIL.obtenerNulos", temporales);
        lista = (List)temporales.get("o_result_set");
        
        logger.info("Fin");        
        
        return lista;
    }
	public List listaTemporales() {
		Map temporales = new HashMap();
		List lista = null;
		
		logger.info("Inicio");
		
        getSqlMapClientTemplate().queryForObject("UTIL.obtenerTemporales", temporales);
        lista = (List)temporales.get("o_result_set");
        
        logger.info("Fin");
        
        return lista;
    }
	public List listaBugsTemporalesDetallado() {
		Map temporales = new HashMap();
		List lista = null;
		
		logger.info("Inicio");
		
        getSqlMapClientTemplate().queryForObject("UTIL.obtenerBugsTemporalesDetallado", temporales);
        lista = (List)temporales.get("o_result_set");
        
        logger.info("Fin");
        
        return lista;
    }

	public Date obtenerFechaBD() {
		java.sql.Timestamp fechaActualBD= (java.sql.Timestamp)getSqlMapClientTemplate().queryForObject("UTIL.selectFechaBaseDatos");
		
		return new Date(fechaActualBD.getTime());
	}
	
	public List obtenerListaReporteCabecera(int inTipoFecha){
		List rows = null;
		//rows = getSqlMapClientTemplate().queryForList("UTIL.select_cabReporte");
		try{
			 HashMap map= new HashMap();
			 map.put("IN_TIPO_FECHA", inTipoFecha);
			 this.getSqlMapClientTemplate().queryForObject("UTIL.sp_obtener_cab_rep", map);
			 rows=(List)map.get("o_result_set");
			
			 
		}catch(Exception ex){
			rows=null;
			logger.error(ex.getMessage(), ex);
		}
		
		return rows;
	}
	
	public HashMap obtenerNumProcesadoReporte(String nomArchivo, Date fechaCarga){
		   HashMap map=null;
		   try{
			  map = new HashMap();
		      
		      map.put("NOM_ARCHIVO", nomArchivo);
		      map.put("FECHA_CARGA", fechaCarga);
          
            logger.info("Se ejecuta el StoreProcedure: "
						.concat(Constantes.ESQUEMA)
						.concat(".").concat(Constantes.PACKAGE_CARGA_DIARIA_UTIL)
						.concat(".").concat("sp_obtener_num_proc_rep"));
			   this.getSqlMapClientTemplate().queryForObject("UTIL.sp_obtener_num_proc_rep", map);
			   logger.info("Termino de ejecutar el StoreProcedure: "
					.concat(Constantes.ESQUEMA)
					.concat(".").concat(Constantes.PACKAGE_CARGA_DIARIA_UTIL)
					.concat(".").concat("sp_actualiza_param_proceso"));
		   }catch(Exception ex){
			   logger.error(ex.getMessage(),ex);
		   }
		return map;
	}
	
	
}
